import { http } from "./index";

/**
 * Form-data 使用示例
 * 
 * 本文件展示了如何在项目中使用 form-data 格式发送数据
 */

// 示例1：默认使用 form-data 格式
export const exampleFormData = () => {
  const data = {
    name: "张三",
    mobile: "13800138000",
    age: 25,
    avatar: null // 可以是 File 对象
  };

  // 默认情况下，数据会自动转换为 FormData 格式
  return http.post("/api/user", { data });
};

// 示例2：明确使用 form-data 格式
export const exampleExplicitFormData = () => {
  const data = {
    name: "李四",
    mobile: "13900139000",
    projects: ["项目1", "项目2"], // 数组会被正确处理
    profile: {
      age: 30,
      gender: "male"
    }
  };

  // 使用专门的 postFormData 方法
  return http.postFormData("/api/user", { data });
};

// 示例3：使用 JSON 格式（当需要时）
export const exampleJsonFormat = () => {
  const data = {
    name: "王五",
    mobile: "13700137000"
  };

  // 明确指定使用 JSON 格式
  return http.postJson("/api/user", { data });
  
  // 或者使用配置参数
  // return http.post("/api/user", { data }, { useJson: true });
};

// 示例4：文件上传
export const exampleFileUpload = (file: File) => {
  const data = {
    name: "文件上传示例",
    description: "这是一个文件上传的例子",
    file: file, // File 对象会被正确处理
    category: "image"
  };

  // 文件上传必须使用 form-data 格式
  return http.postFormData("/api/upload", { data });
};

// 示例5：复杂数据结构
export const exampleComplexData = () => {
  const data = {
    user: {
      name: "赵六",
      profile: {
        age: 28,
        skills: ["JavaScript", "TypeScript", "Vue"]
      }
    },
    projects: [
      { id: 1, name: "项目A" },
      { id: 2, name: "项目B" }
    ],
    settings: {
      theme: "dark",
      notifications: true
    }
  };

  // 复杂的嵌套对象也会被正确转换为 form-data 格式
  return http.post("/api/complex", { data });
};

/**
 * 数据格式转换说明：
 * 
 * 1. 默认行为：所有 POST 请求都会将数据转换为 FormData 格式
 * 2. JSON 格式：通过设置 useJson: true 或使用 postJson 方法
 * 3. 文件处理：File 和 Blob 对象会被直接添加到 FormData 中
 * 4. 数组处理：数组会被转换为 key[0], key[1] 的格式
 * 5. 对象处理：嵌套对象会被转换为 key[subkey] 的格式
 * 
 * FormData 格式的优势：
 * - 支持文件上传
 * - 更好的兼容性
 * - 自动处理编码
 * - 支持二进制数据
 */
